/**
 * 默认缓存时间（秒）
 */
const DEFALUE_CACHE_TIME = 7 * 24 * 60 * 60

/**
 * 本地缓存类
 */
class LocalStorage{
    private storage: Storage;
    constructor(storage:Storage){
       this.storage = storage
    }
    /**
     * 获取缓存数据
     * @param key 键名
     * @param def 返回默认值
     * @returns 
     */
    get(key:string,def:any = null){
        const item = JSON.parse(key.toUpperCase())
        if(item){
            const {value,expire} = item
            if(expire === null || expire >= Date.now()){
                return value
            }else{
                this.storage.remove(key)
            }
        }
        return def
    }
    /**
     * 设置缓存
     * @param key 键名
     * @param value 数据
     * @param expire 过期时间
     */
    set(key:string,value:any,expire:number | null = DEFALUE_CACHE_TIME){
        const storageData = JSON.stringify({
            value,
            expire:expire !== null ? new Date().getTime() + expire * 1000 : null 
        })
        this.storage.setItem(key.toUpperCase(),storageData)
    }
    /**
     * 删除缓存中的某一项
     * @param key 键名
     */
    remove(key:string){
        this.storage.removeItem(key.toUpperCase())
    }
    /**
     * 清空缓存
     */
    clear():void{
        this.storage.clear()
    }
}  


export const storage =  new LocalStorage(localStorage)